using System;

namespace ActivUFRJ.Classes.Busca
{
    public class DBBuscarUsuarios : Connection.MySQL
    {
        public DBBuscarUsuarios() : base(ref Connection.DBConnection.myConnection)
        {

        }

        internal ResultadoBusca GetResultadoBusca(ParametrosPessoa pp)
        {

            try
            {

                ResultadoBusca resultadoBusca = new ResultadoBusca();

                string SQL = "SELECT usuarios.USR_ID, CONCAT(USR_NOME, ' ', USR_SOBRENOME) as NomeCompleto, USR_DATA_REGISTRO, ai_descricao, ins_descricao, fa_descricao " +
                                "from usuarios " +
                                "inner join areas_de_interesse on usuarios.ai_id = areas_de_interesse.ai_id " +
                                "inner join instituicoes on usuarios.ins_id = instituicoes.ins_id " +
                                "inner join formacoes_academicas on usuarios.fa_id = formacoes_academicas.fa_id " +
                                "where 1 = 1";

                if (pp.AreaTrabalho != null) SQL += " AND usuarios.AI_ID = " + pp.AreaTrabalho.ID.ToString();
                if (pp.FormacaoAcademica != null) SQL += " AND usuarios.FA_ID = " + pp.FormacaoAcademica.ID.ToString();
                if (pp.Instituicao != null) SQL += " AND usuarios.INS_ID = " + pp.Instituicao.ID.ToString();
                if (pp.Nome.Length > 0) SQL += " AND usuarios.USR_Nome like '%" + pp.Nome.Replace("'", "''") + "%' OR usuarios.USR_Sobrenome like '%" + pp.Nome.Replace("'", "''") + "%'";
                //if (pp.AreaInteresse != null) SQL += " AND usuario_areas_de_interesse.ai_id = " + pp.AreaInteresse.ID.ToString();


                // 1. Pegar os valores da consulta
                System.DateTime inicioBusca = System.DateTime.Now;
                this.SetSQL(SQL);

                // 1. Tempo de busca
                System.TimeSpan tempoTotal = System.DateTime.Now.Subtract(inicioBusca);
                resultadoBusca.TempoDeBusca = Convert.ToDouble(tempoTotal.Milliseconds) / Convert.ToDouble(1000);

                resultadoBusca.ResultadoDT = this.ReturnTable();
                
                // 2. # de linhas afetadas
                resultadoBusca.NumeroRegistros = this.GetRowCount();

                // 3. tempo de execucao
                //resultadoBusca.TempoDeBusca = 

                return resultadoBusca;
            }
            catch (Exception ex)
            {
                return null;
            }
        }
    }
}
